package Report;

import java.util.Date;
import Data.*;

/**
 * Ein ReportGenerator bietet die Möglichkeit, eine Menge von Berichten (Reports)
 * zu erstellen, die Menge von Daten bzgl. bestimmter Sachverhalte des Systems
 * zweckspezifisch darstellen.<p>
 *
 * Die Klasse bietet eine Reihe von <code>create...</code>-Methoden, mit deren
 * Hilfe die Reports erstellt werden können. Jede dieser Methoden besitzt eine
 * dem Anwendungsfall entsprechende Parameterliste. Diese Parameter benötigt der
 * der Generator, um den Report erstellen zu können.<p>
 *
 * Bei neu hinzukommenden Bedarfen an Berichten, kann diese Klasse auf einfache
 * Weise erweitert werden. Hierzu können zusätzliche <code>create...</code>-Methoden
 * implementiert werden. Die bestehenden Methoden bleiben davon unbeeinflußt, so
 * dass bestehende Programmlogik nicht verändert werden muß.
 *
 * @author Thies (Quelle: BankProjekt 1.1)
 * @author Philipp Armbruster
 */

public interface ReportGenerator extends java.rmi.Remote {

    /**
     * Erstellen eines <code>SeatallocationOfASpecificFlightRealizationReport</code>-Objekts anhand
     * einer realizationId (Flugdurchführungsnummer)
     *
     * @param fr, FlightRealization-Objekt von welchem der Report erstellt werden soll.
     * @return Ein SeatallocationOfASpecificFlightRealizationReport (Sitzplatzbelegung einer speziellen Flugdurchführung)
     * @throws java.rmi.RemoteException
     */
    public abstract SeatallocationOfASpecificFlightRealizationReport createSeatallocationOfASpecificFlightRealizationReport
            (int realizationId)
            throws java.rmi.RemoteException;

    /**
     * Erstellen eines <code>FlightmovementsOfSpecificPassengerReport</code>-Objekts anhand einer passengerId (Kundennummer),
     * einer airlineId (Eindeutige Id der Airline) sowie eines Zeitraums mit startOfTimeframe (Startdatum) und endOfTimeframe (Enddatum)
     *
     * @param startID die Wurzelteilenummer der Baugruppe oder des Enderzeugnisses
     * @return Ein FlightmovementsOfSpecificPassenger-Report (Alle Flüge eines Passagiers bei einer Airline in einem bestimmten Zeitraum)
     * @throws java.rmi.RemoteException
     */
    public abstract FlightmovementsOfSpecificPassengerReport createFlightmovementsOfSpecificPassengerReport
            (int passengerId, int airlineId, Date startOfTimeframe, Date endOfTimeframe)
            throws java.rmi.RemoteException;

    /**
     * Methode gibt den übergebenen Report in einem eigenen Frame im Html-Format aus
     *
     * @param report
     * @throws java.rmi.RemoteException
     */
    public abstract void outputSeatallocationOfASpecificFlightRealizationReport(SeatallocationOfASpecificFlightRealizationReport report)
            throws java.rmi.RemoteException;

    /**
     * Methode gibt den übergebenen Report in einem eigenen Frame im Html-Format aus
     *
     * @param report
     * @throws java.rmi.RemoteException
     */
    public abstract void outputFlightmovementsOfSpecificPassengerReport(FlightmovementsOfSpecificPassengerReport report)
            throws java.rmi.RemoteException;

    
}

